set(AVX_SOURCES
    src/hl_math.cc
    src/hl_avx_functions.cc
)
set(CUDA_SOURCES
    src/hl_time.cc
    src/hl_cpu_functions.cc
    ${AVX_SOURCES})

set(CUDA_CXX_WITH_GPU_SOURCES
    src/hl_cuda_cublas.cc
    src/hl_cuda_cudnn.cc
    src/hl_cuda_device.cc)

set_source_files_properties(${CUDA_CXX_WITH_GPU_SOURCES}
                            PROPERTIES COMPILE_FLAGS "-D__NVCC__")

set_source_files_properties(${AVX_SOURCES}
                            PROPERTIES COMPILE_FLAGS "-mavx")

set(CUDA_DSO_SOURCES
    src/hl_dso_loader.cc
    src/hl_cudart_wrap.cc)

set(CUDA_CU_SOURCES
    src/hl_perturbation_util.cu
    src/hl_cuda_aggregate.cu
    src/hl_cuda_matrix.cu
    src/hl_cuda_sparse.cu
    src/hl_cuda_cnn.cu
    src/hl_cuda_lstm.cu
    src/hl_top_k.cu
    src/hl_batch_transpose.cu
    src/hl_cuda_sequence.cu
    src/hl_table_apply.cu)

set(CUDA_HEADERS
    include/hl_time.h
    include/hl_dso_loader.h
    include/hl_sequence.h
    include/hl_cuda_cublas.h
    include/hl_batch_transpose.h
    include/hl_avx_functions.h
    include/hl_sparse.h
    include/hl_functions.h
    include/hl_cuda_cudnn.h
    include/hl_activation_functions.h
    include/hl_base.h
    include/stub/hl_cuda_cudnn_stub.h
    include/stub/hl_cuda_stub.h
    include/stub/hl_cuda_cublas_stub.h
    include/stub/hl_cnn_stub.h
    include/stub/hl_lstm_stub.h
    include/stub/hl_sequence_stub.h
    include/stub/hl_aggregate_stub.h
    include/stub/hl_sparse_stub.h
    include/stub/hl_matrix_stub.h
    include/hl_aggregate.h
    include/hl_cuda.h
    include/hl_lstm.h
    include/hl_table_apply.h
    include/hl_gpu.h
    include/hl_top_k.h
    include/hl_matrix.h
    include/hl_cnn.h)

if(WITH_GPU)
    cuda_add_library(paddle_cuda
        ${CUDA_SOURCES}
        ${CUDA_CU_SOURCES}
        ${CUDA_DSO_SOURCES}
        ${CUDA_CXX_WITH_GPU_SOURCES})
else()
    add_library(paddle_cuda ${CUDA_SOURCES})
endif()

add_style_check_target(paddle_cuda ${CUDA_SOURCES})
add_style_check_target(paddle_cuda ${CUDA_HEADERS})
